<!DOCTYPE html>
<html lang="en" dir="auto">

<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>3D Kinematics and Dynamics | WangJV Blog</title>
<meta name="keywords" content="数学, 运动学, 动力学, 旋转矩阵">
<meta name="description" content="深入探讨三维空间中的运动学和动力学基础，包括旋转矩阵、四元数和李群理论">
<meta name="author" content="WangJV">
<link rel="canonical" href="https://wangjv0812.github.io/WangJV-Blog-Pages/2025/06/3d-kinematics-and-dynamics/">
<link crossorigin="anonymous" href="https://wangjv0812.github.io/WangJV-Blog-Pages/assets/css/stylesheet.8fe10233a706bc87f2e08b3cf97b8bd4c0a80f10675a143675d59212121037c0.css" integrity="sha256-j&#43;ECM6cGvIfy4Is8&#43;XuL1MCoDxBnWhQ2ddWSEhIQN8A=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://wangjv0812.github.io/WangJV-Blog-Pages/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://wangjv0812.github.io/WangJV-Blog-Pages/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://wangjv0812.github.io/WangJV-Blog-Pages/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://wangjv0812.github.io/WangJV-Blog-Pages/apple-touch-icon.png">
<link rel="mask-icon" href="https://wangjv0812.github.io/WangJV-Blog-Pages/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="en" href="https://wangjv0812.github.io/WangJV-Blog-Pages/2025/06/3d-kinematics-and-dynamics/">
<noscript>
    <style>
        #theme-toggle,
        .top-link {
            display: none;
        }

    </style>
    <style>
        @media (prefers-color-scheme: dark) {
            :root {
                --theme: rgb(29, 30, 32);
                --entry: rgb(46, 46, 51);
                --primary: rgb(218, 218, 219);
                --secondary: rgb(155, 156, 157);
                --tertiary: rgb(65, 66, 68);
                --content: rgb(196, 196, 197);
                --code-block-bg: rgb(46, 46, 51);
                --code-bg: rgb(55, 56, 62);
                --border: rgb(51, 51, 51);
            }

            .list {
                background: var(--theme);
            }

            .list:not(.dark)::-webkit-scrollbar-track {
                background: 0 0;
            }

            .list:not(.dark)::-webkit-scrollbar-thumb {
                border-color: var(--theme);
            }
        }

    </style>
</noscript><script>
  MathJax = {
    tex: {
      displayMath: [['\\[', '\\]'], ['$$', '$$']],
      inlineMath: [['\\(', '\\)'], ['$', '$']],
      processEscapes: true,
      processEnvironments: true,
      tags: 'ams'
    },
    chtml: {
      scale: 1,                     
      minScale: 0.5,               
      matchFontHeight: false,       
      displayAlign: 'center',       
      displayIndent: '0',           
      mtextInheritFont: false,      
      merrorInheritFont: true,      
      mathmlSpacing: false,         
      skipHtmlTags: ['script','noscript','style','textarea','pre','code','a'],
      ignoreHtmlClass: 'tex2jax_ignore',
      processHtmlClass: 'tex2jax_process'
    },
    svg: {
      scale: 1,                     
      minScale: 0.5,               
      mtextInheritFont: false,      
      merrorInheritFont: true,
      mathmlSpacing: false,
      skipHtmlTags: ['script','noscript','style','textarea','pre','code','a'],
      ignoreHtmlClass: 'tex2jax_ignore',
      processHtmlClass: 'tex2jax_process'
    },
    options: {
      enableMenu: true,             
      menuOptions: {
        settings: {
          zoom: 'Click'             
        }
      }
    },
    loader: {
      load: ['ui/safe', 'a11y/assistive-mml']
    },
    startup: {
      ready() {
        MathJax.startup.defaultReady();
        
        const observer = new ResizeObserver(entries => {
          MathJax.typesetPromise();
        });
        observer.observe(document.body);
      }
    }
  };
  
  
  if (window.innerWidth <= 768) {
    MathJax.chtml = MathJax.chtml || {};
    MathJax.chtml.scale = 0.9;  
  }
</script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>


<style>
   
  .MathJax {
    outline: 0;
  }
  
   
  @media (max-width: 768px) {
    .MathJax {
      font-size: 90% !important;
    }
    
     
    .MathJax_Display {
      overflow-x: auto;
      overflow-y: hidden;
      padding: 0 !important;
      margin: 1em 0 !important;
    }
    
     
    .MathJax_CHTML {
      line-height: 1.2 !important;
    }
  }
  
   
  mjx-container[jax="CHTML"][display="true"] {
    overflow-x: auto;
    overflow-y: hidden;
    padding: 1px 0;
  }
</style><meta property="og:url" content="https://wangjv0812.github.io/WangJV-Blog-Pages/2025/06/3d-kinematics-and-dynamics/">
  <meta property="og:site_name" content="WangJV Blog">
  <meta property="og:title" content="3D Kinematics and Dynamics">
  <meta property="og:description" content="深入探讨三维空间中的运动学和动力学基础，包括旋转矩阵、四元数和李群理论">
  <meta property="og:locale" content="en-us">
  <meta property="og:type" content="article">
    <meta property="article:section" content="posts">
    <meta property="article:published_time" content="2025-06-20T17:13:56+08:00">
    <meta property="article:modified_time" content="2025-06-20T17:13:56+08:00">
    <meta property="article:tag" content="数学">
    <meta property="article:tag" content="运动学">
    <meta property="article:tag" content="动力学">
    <meta property="article:tag" content="旋转矩阵">
      <meta property="og:image" content="https://wangjv0812.github.io/WangJV-Blog-Pages/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://wangjv0812.github.io/WangJV-Blog-Pages/">
<meta name="twitter:title" content="3D Kinematics and Dynamics">
<meta name="twitter:description" content="深入探讨三维空间中的运动学和动力学基础，包括旋转矩阵、四元数和李群理论">


<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position":  1 ,
      "name": "Posts",
      "item": "https://wangjv0812.github.io/WangJV-Blog-Pages/posts/"
    }, 
    {
      "@type": "ListItem",
      "position":  2 ,
      "name": "3D Kinematics and Dynamics",
      "item": "https://wangjv0812.github.io/WangJV-Blog-Pages/2025/06/3d-kinematics-and-dynamics/"
    }
  ]
}
</script>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "3D Kinematics and Dynamics",
  "name": "3D Kinematics and Dynamics",
  "description": "深入探讨三维空间中的运动学和动力学基础，包括旋转矩阵、四元数和李群理论",
  "keywords": [
    "数学", "运动学", "动力学", "旋转矩阵"
  ],
  "articleBody": "1. 旋转矩阵 对于空间中的一个向量 $\\boldsymbol{r}$，在坐标系 $\\mathcal F_1, \\mathcal F_2$ 下，用坐标描述有：\n$$ \\boldsymbol{r} = \\mathcal F_1^T \\boldsymbol{r}_1 = \\mathcal F_2^T \\boldsymbol{r}_2 $$应有：\n$$ \\boldsymbol{r}_1 = \\mathcal F_1 \\mathcal F_2^T \\boldsymbol{r}_2 $$我们令：\n$$ \\boldsymbol R_{12} = \\mathcal F_1 \\mathcal F_2^T $$各种文献中旋转矩阵的定义十分混乱，我们遵从这样一个定义：$\\boldsymbol R_{12}$，即将同一个向量丛坐标系 $\\mathcal F_2$ 变换到坐标系 $\\mathcal F_1$ 下。坐标系变换有：\n$$ \\boldsymbol R_{12} \\mathcal F_2= \\mathcal F_1 \\mathcal F_2^T \\mathcal F_2 = \\mathcal F_1 $$类似的，我们还可以用向量的坐标和基之间的关系来推导坐标变换：\n$$ \\begin{aligned} \\boldsymbol{r}_2 \u0026= \\boldsymbol{R}_{21} \\boldsymbol{r}_1\\\\ \\mathcal F_1^T \\boldsymbol{r}_1 \u0026= \\mathcal F_2^T \\boldsymbol{R}_{21} \\boldsymbol{r}_1\\\\ \\mathcal F_1^T \\boldsymbol{r}_1 \u0026= \\left(\\boldsymbol{R}_{12} \\mathcal F_2\\right)^T \\boldsymbol{r}_2\\\\ \\end{aligned} $$那么应该有：\n$$ \\mathcal F_1 = \\boldsymbol{R}_{12} \\mathcal F_2 $$1.1. 罗德里格斯公式和角轴 任意一个向量 $\\boldsymbol{r}$ 三维旋转总能通过一个单位的旋转轴 $\\boldsymbol{n}$ 和绕着该轴的旋转角度 $\\theta$ 来描述。我们不妨将向量 $\\boldsymbol{r}$ 分解为垂直旋转轴的部分和水平旋转轴的部分：\n$$ \\boldsymbol{r} = \\boldsymbol{r}_\\parallel + \\boldsymbol{r}_\\perp $$根据点乘（投影）和叉乘（公共法线）的性质，不难写出：\n$$ \\boldsymbol{r}_\\parallel = \\frac{\\boldsymbol{r} \\cdot \\boldsymbol{n}}{\\boldsymbol{n} \\cdot \\boldsymbol{n}} \\boldsymbol{n} = (\\boldsymbol{r} \\cdot \\boldsymbol{n}) \\boldsymbol{n} $$此时 $\\boldsymbol{r}_\\parallel$ 与旋转轴平行，旋转本身不影响其大小。对于垂直的部分 $\\boldsymbol{r}_\\perp$，有：\n$$ \\boldsymbol{r}_\\perp = \\boldsymbol{r} - \\boldsymbol{r}_\\parallel = \\boldsymbol{r} - (\\boldsymbol{r} \\cdot \\boldsymbol{n}) \\boldsymbol{n} $$我们需要在旋转平面（与旋转轴垂直的平面）上找到一个与 $\\boldsymbol{r}_\\perp$ 垂直的向量。这样可以构建出一个平面上的正交基，这样就可以通过平面的旋转矩阵来实现 $\\boldsymbol{r}_\\perp$ 的旋转了。这个向量 $\\boldsymbol{w}$ 可以通过叉乘得到：\n$$ \\begin{aligned} \\boldsymbol{w} \u0026= \\boldsymbol{n} \\times \\boldsymbol{r}_\\perp\\\\ \u0026= \\boldsymbol{n} \\times \\left(\\boldsymbol{r} - (\\boldsymbol{r} \\cdot \\boldsymbol{n}) \\boldsymbol{n}\\right)\\\\ \u0026= \\boldsymbol{n} \\times \\boldsymbol{r} - \\boldsymbol{n} \\times (\\boldsymbol{r} \\cdot \\boldsymbol{n}) \\boldsymbol{n}\\\\ \u0026= \\boldsymbol{n} \\times \\boldsymbol{r} \\end{aligned} $$那么旋转结果可以写出：\n$$ \\begin{aligned} \\boldsymbol{r}_\\perp' \u0026= \\cos \\theta \\boldsymbol{r}_\\perp + \\sin \\theta \\boldsymbol{w}\\\\ \u0026= \\cos \\theta \\left(\\boldsymbol{r} - (\\boldsymbol{r} \\cdot \\boldsymbol{n}) \\boldsymbol{n}\\right) + \\sin \\theta \\boldsymbol{n} \\times \\boldsymbol{r}\\\\ \u0026= \\cos \\theta \\boldsymbol{r} - \\cos \\theta (\\boldsymbol{r} \\cdot \\boldsymbol{n}) \\boldsymbol{n} + \\sin \\theta \\boldsymbol{n} \\times \\boldsymbol{r}\\\\ \\end{aligned} $$垂直分量和平行分量结合，有：\n$$ \\begin{aligned} \\boldsymbol{r}' \u0026= \\boldsymbol{r}_\\perp' + \\boldsymbol{r}_\\parallel'\\\\ \u0026= \\cos \\theta \\boldsymbol{r} - \\cos \\theta (\\boldsymbol{r} \\cdot \\boldsymbol{n}) \\boldsymbol{n} + \\sin \\theta \\boldsymbol{n} \\times \\boldsymbol{r} + (\\boldsymbol{r} \\cdot \\boldsymbol{n}) \\boldsymbol{n}\\\\ \u0026= cos \\theta \\boldsymbol{r} + (1 - \\cos \\theta) (\\boldsymbol{r} \\cdot \\boldsymbol{n}) \\boldsymbol{n} + \\sin \\theta \\boldsymbol{n} \\times \\boldsymbol{r}\\\\ \u0026= \\cos \\theta \\boldsymbol{r} + (1 - \\cos \\theta) \\boldsymbol{n}\\boldsymbol{n}^T \\boldsymbol{r} + \\sin \\theta \\boldsymbol{n} \\times \\boldsymbol{r}\\\\ \\end{aligned} $$可以总结为：\n$$ \\boldsymbol{r}' \\boldsymbol{r}^{-1} = \\boldsymbol{R}_{21} = \\cos \\theta + (1 - \\cos \\theta) \\boldsymbol{n}\\boldsymbol{n}^T + \\sin \\theta \\boldsymbol{n}^\\times $$1.2. 欧拉角 欧拉角将三维旋转分解为绕三个坐标轴的旋转，最终的旋转可以表达为三个绕坐标轴旋转的合成：\n我们可以写出绕着三个旋转轴的旋转矩阵为：\n$$ \\begin{array}{c} \\boldsymbol{R}_1 = \\begin{bmatrix} \\cos \\theta_1 \u0026 -\\sin \\theta_1 \u0026 0\\\\ \\sin \\theta_1 \u0026 \\cos \\theta_1 \u0026 0\\\\ 0 \u0026 0 \u0026 1 \\end{bmatrix}\\\\ \\boldsymbol{R}_2 = \\begin{bmatrix} \\cos \\theta_2 \u0026 0 \u0026 -\\sin \\theta_2\\\\ 0 \u0026 1 \u0026 0\\\\ \\sin \\theta_2 \u0026 0 \u0026 \\cos \\theta_2\\\\ \\end{bmatrix}\\\\ \\boldsymbol{R}_3 = \\begin{bmatrix} 1 \u0026 0 \u0026 0\\\\ 0 \u0026 \\cos \\theta_3 \u0026 \\sin \\theta_3\\\\ 0 \u0026 -\\sin \\theta_3 \u0026 \\cos \\theta_3 \\end{bmatrix} \\end{array} $$任意一个旋转矩阵总可以表达为上面三个旋转矩阵的合成。麻烦的点在于不同的合成顺序，最终的旋转矩阵并不相同。我们给出 $1-2-3$ 顺序下的欧拉角旋转矩阵：\n$$ \\begin{align*} \\boldsymbol{R}_{21}(\\theta_{3},\\theta_{2},\\theta_{1}) \u0026= \\boldsymbol{R}_{3}(\\theta_{3})\\boldsymbol{R}_{2}(\\theta_{2})\\boldsymbol{R}_{1}(\\theta_{1})\\\\ \u0026= \\begin{bmatrix} c_{2}c_{3} \u0026 c_{1}s_{3}+s_{1}s_{2}c_{3} \u0026 s_{1}s_{3}-c_{1}s_{2}c_{3}\\\\ -c_{2}s_{3} \u0026 c_{1}c_{3}-s_{1}s_{2}s_{3} \u0026 s_{1}c_{3}+c_{1}s_{2}s_{3}\\\\ s_{2} \u0026 -s_{1}c_{2} \u0026 c_{1}c_{2} \\end{bmatrix} \\end{align*} $$不难发现旋转矩阵的奇异点：\n$$ \\boldsymbol{R}_{21}(\\theta_3, \\frac \\pi 2, \\theta_1) = \\begin{bmatrix} 0\u0026 s_(\\theta_1 + \\theta_3)\u0026 -c(\\theta_1 + \\theta_3)\\\\ 0\u0026 c(\\theta_1 + \\theta_3)\u0026 s(\\theta_1 + \\theta_3)\\\\ 1\u0026 0\u0026 0 \\end{bmatrix} $$可以看到，此时 $\\theta_1$ 和 $\\theta_3$ 表达了同一旋转。\n此外，当旋转非常小时，有 $c_\\theta \\sim 1, s_\\theta \\sim \\theta$，有：\n$$ \\boldsymbol{R}_{21} = \\begin{bmatrix} 1 \u0026 \\theta_3 \u0026 -\\theta_2 \\\\ -\\theta_3 \u0026 1 \u0026 \\theta_1 \\\\ \\theta_2 \u0026 -\\theta_1 \u0026 1 \\end{bmatrix} = 1 - \\boldsymbol{\\theta}^\\times $$2. 旋转的运动学 2.1. 角速度 假设参考系 $\\mathcal{F}_1$ 与 $\\mathcal F_2$ 之间存在着相对旋转。我们定义 $\\mathcal F_1$ 相对于 $\\mathcal F_2$ 的角速度为 $\\omega_{12} = -\\omega_{21}$。其方向为旋转的轴的方向，大小为旋转的标量速度。由于旋转速度的存在，$\\mathcal F_1$ 与 $\\mathcal F_2$ 之间观察到的运动是不同的，不妨定义在 $\\mathcal F_1$ 下的向量的时间导数为 $(·)^\\bullet$，$\\mathcal F_2$ 下向量的时间导数定义为 $(\\cdot)^\\circ$。应有在各自坐标系下观察坐标系的基向量的导数为0:\n$$ \\begin{array}{c} \\mathcal F_1^\\bullet = 0\u0026 \\mathcal F_2^\\circ = 0 \\end{array} $$且根据叉乘的几何性质，有在坐标系 $\\mathcal F_1$ 观察下，$\\mathcal F_2$ 的基向量的导数为：\n$$ \\mathcal F_2^\\bullet = \\omega_{21} \\times \\mathcal F_2 $$类似的，有：\n$$ \\mathcal F_1^\\circ = \\omega_{12} \\times \\mathcal F_1 $$对于空间中的一个向量 $\\boldsymbol{r}$，通过坐标描述，有：\n$$ \\boldsymbol{r} = \\mathcal F_1^T \\boldsymbol{r}_1 = \\mathcal F_2^T \\boldsymbol{r}_2 $$那么 $\\mathcal F_1$ 坐标下观察的 $\\boldsymbol{r}$ 的时间导数为：\n$$ \\begin{aligned} \\boldsymbol{r}^\\bullet \u0026= \\mathcal {F_1^{\\bullet}}^T \\boldsymbol{r}_1 + \\mathcal F_1^T \\boldsymbol{r}_1^\\bullet\\\\ \u0026= \\mathcal F_1^T \\boldsymbol{r}_1^\\bullet \\end{aligned} $$类似的有：\n$$ \\begin{aligned} \\boldsymbol{r}^\\circ \u0026= \\mathcal {F_2^{\\circ}}^T \\boldsymbol{r}_2 + \\mathcal F_2^T \\boldsymbol{r}_2^\\circ\\\\ \u0026= \\mathcal F_2^T \\boldsymbol{r}_2^\\circ \\end{aligned} $$需要注意，对于非向量的量（如标量、坐标等），可以理解其时间导数不受基向量的影响，满足 $\\boldsymbol{r}^\\bullet = \\boldsymbol{r}^\\circ$。那么有：\n$$ \\boldsymbol{r}^\\circ = \\mathcal F_2^T \\boldsymbol{r}_2^\\bullet $$如果我们观察到向量 $\\boldsymbol{r}$ 在 $\\mathcal F_2$ 下的速度 $\\boldsymbol{r}^\\circ$（事实上这是很常见的。我们在一个运动坐标系下观察了一个物体的运动，希望知道其相对于禁止的坐标系的运动），想知道在坐标系 $\\mathcal F_1$ 下向量 $\\boldsymbol{r}^\\bullet$ 的速度，那么应有：\n$$ \\begin{aligned} \\boldsymbol{r}^\\bullet \u0026= \\left(\\mathcal F_2^T \\boldsymbol{r}_2\\right)^\\bullet = \\mathcal {F_2^T}^\\bullet \\boldsymbol{r}_2 + \\mathcal F_2^T \\boldsymbol{r}_2^\\bullet\\\\ \u0026= \\boldsymbol{r}^\\circ + \\omega_{21} \\times \\mathcal F_2^T \\boldsymbol{r}_2\\\\ \u0026= \\boldsymbol{r}^\\circ + \\omega_{21} \\times \\boldsymbol{r} \\end{aligned} $$我们可以标记 $\\omega_{21} = \\mathcal F_2^T \\omega_{21}^2$，那么有：\n$$ \\begin{array}{cccl} \u0026\\mathcal F_1^T \\boldsymbol{r_1}^\\bullet \u0026=\u0026 \\mathcal F_2^T \\boldsymbol{r}_2^\\circ + \\mathcal F_2^T \\omega_{21}^2 \\times \\boldsymbol{r}_2\\\\ \u0026\\boldsymbol{r}_1^\\bullet \u0026=\u0026 \\boldsymbol{R}_{12} \\left(\\boldsymbol{r}_2^\\circ + \\omega_{21}^2 \\times \\boldsymbol{r}_2\\right) \\end{array} $$可以总结出；\n$$ \\boldsymbol{r}_1^\\bullet = \\boldsymbol{R}_{12} \\left(\\boldsymbol{r}_2^\\circ + \\omega_{21}^2 \\times \\boldsymbol{r}_2\\right) $$有趣的是，我们并没有对向量 $\\boldsymbol{r}$ 的性质有任何假设。希望这句话可以给读者留下来一点点印象，该性质在后面的推导中十分重要。\n2.2. 加速度 令速度 $\\boldsymbol{v} = \\boldsymbol{r}^\\circ + \\omega_{21} \\times \\boldsymbol{r}$，使用前面的性质，有：\n$$ \\begin{aligned} \\boldsymbol{r}^{\\bullet\\bullet} = \\boldsymbol{v}^\\bullet \u0026= \\boldsymbol{v}^\\circ + \\omega_{21} \\times \\boldsymbol{v}\\\\ \u0026= \\left(\\boldsymbol{r}^\\circ + \\omega_{21} \\times \\boldsymbol{r}\\right) ^\\circ + \\omega_{21} \\times \\left(\\boldsymbol{r}^\\circ + \\omega_{21} \\times \\boldsymbol{r}\\right)\\\\ \u0026= \\boldsymbol{r}^{\\circ\\circ} + \\omega_{21}^\\circ \\times \\boldsymbol{r} + \\omega_{21} \\times \\boldsymbol{r}^\\circ + \\omega_{21} \\times \\boldsymbol{r}^\\circ + \\omega_{21} \\times \\left(\\omega_{21} \\times \\boldsymbol{r}\\right)\\\\ \u0026= \\boldsymbol{r}^{\\circ\\circ} + \\omega_{21}^\\circ \\times \\boldsymbol{r} + 2\\omega_{21} \\times \\boldsymbol{r}^\\circ + \\omega_{21} \\times \\left(\\omega_{21} \\times \\boldsymbol{r}\\right) \\end{aligned} $$同样的，我们引入旋转矩阵，建立两个坐标系下的向量的导数之间的关系：\n$$ \\begin{array}{cccc} \\boldsymbol{r}^{\\bullet\\bullet} = \\mathcal F_1^T \\boldsymbol{r}_1^{\\bullet\\bullet} \u0026 \\boldsymbol{r}^{\\circ\\circ} = \\mathcal F_2^T \\boldsymbol{r}_2^{\\circ\\circ} \u0026 \\omega_{21} = \\mathcal F_2^T \\omega_{21}^2 \u0026 \\boldsymbol{r} = \\mathcal F_2^T \\boldsymbol{r}_2 \\end{array} $$有：\n$$ \\boldsymbol{r}_1^{\\bullet\\bullet} = \\boldsymbol{R}_{12}\\left( \\boldsymbol{r}_2^{\\circ\\circ}+ \\omega_{21}^2 \\times \\boldsymbol{r}_2+ 2\\omega_{21} \\times \\boldsymbol{r}_2^\\circ+ \\omega_{21} \\times \\left(\\omega_{21} \\times \\boldsymbol{r}_2\\right) \\right) $$事实上上面的形式中的每一项都有名字：\n$$ \\begin{array}{rl} \\boldsymbol{r}_2^{\\circ\\circ} \u0026 \\text{在} \\mathcal F_2 \\text{下的加速度}\\\\ 2\\omega_{21} \\times \\boldsymbol{r}_2^\\circ \u0026 \\text{科里奥利加速度}\\\\ \\omega_{21}^2 \\times \\boldsymbol{r}_2 \u0026 \\text{角加速度}\\\\ \\omega_{21} \\times \\left(\\omega_{21} \\times \\boldsymbol{r}_2\\right) \u0026 \\text{向心加速度}\\\\ \\end{array} $$2.3. 旋转矩阵的导数 对于坐标系 $\\mathcal F_1$ 与 $\\mathcal F_2$ 之间，有：\n$$ \\mathcal F_1^T = \\mathcal F_2^T \\boldsymbol{R}_{21} $$两边在 $\\mathcal F_1$ 下求时间导数：\n$$ \\begin{array}{c} 0 = {\\mathcal F_2^T}^\\bullet \\boldsymbol{R}_{21} + \\mathcal F_2^T \\boldsymbol{R}_{21}^\\bullet\\\\ 0 = \\mathcal F_2^T {\\omega_{21}^2}^\\times \\boldsymbol{R}_{21} + \\mathcal F_2^T \\boldsymbol{R}_{21}^\\bullet\\\\ 0 = \\mathcal F_2^T \\left({\\omega_{21}^2}^\\times \\boldsymbol{R}_{21} + \\boldsymbol{R}_{21}^\\bullet \\right) \\end{array} $$那么有：\n$$ \\boldsymbol{R}_{21}^\\bullet = -{\\omega_{21}^2}^\\times \\boldsymbol{R}_{21} $$这就是著名的柏松公式。柏松公式还有下面一个有用的变形：\n$$ {\\omega_{21}^2}^\\times = -\\boldsymbol{R}_{21}^\\bullet \\boldsymbol{R}_{21}^T $$通过这个形式我们可以通过计算旋转矩阵的数值微分来计算角速度。\n",
  "wordCount" : "898",
  "inLanguage": "en",
  "image": "https://wangjv0812.github.io/WangJV-Blog-Pages/","datePublished": "2025-06-20T17:13:56+08:00",
  "dateModified": "2025-06-20T17:13:56+08:00",
  "author":{
    "@type": "Person",
    "name": "WangJV"
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://wangjv0812.github.io/WangJV-Blog-Pages/2025/06/3d-kinematics-and-dynamics/"
  },
  "publisher": {
    "@type": "Organization",
    "name": "WangJV Blog",
    "logo": {
      "@type": "ImageObject",
      "url": "https://wangjv0812.github.io/WangJV-Blog-Pages/favicon.ico"
    }
  }
}
</script>
</head>

<body class="" id="top">
<script>
    if (localStorage.getItem("pref-theme") === "dark") {
        document.body.classList.add('dark');
    } else if (localStorage.getItem("pref-theme") === "light") {
        document.body.classList.remove('dark')
    } else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
        document.body.classList.add('dark');
    }

</script>

<header class="header">
    <nav class="nav">
        <div class="logo">
            <a href="https://wangjv0812.github.io/WangJV-Blog-Pages/" accesskey="h" title="WangJV Blog (Alt + H)">WangJV Blog</a>
            <div class="logo-switches">
                <button id="theme-toggle" accesskey="t" title="(Alt + T)" aria-label="Toggle theme">
                    <svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                        stroke-linejoin="round">
                        <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
                    </svg>
                    <svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                        stroke-linejoin="round">
                        <circle cx="12" cy="12" r="5"></circle>
                        <line x1="12" y1="1" x2="12" y2="3"></line>
                        <line x1="12" y1="21" x2="12" y2="23"></line>
                        <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
                        <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
                        <line x1="1" y1="12" x2="3" y2="12"></line>
                        <line x1="21" y1="12" x2="23" y2="12"></line>
                        <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
                        <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
                    </svg>
                </button>
            </div>
        </div>
        <ul id="menu">
            <li>
                <a href="https://wangjv0812.github.io/WangJV-Blog-Pages/" title="Home">
                    <span>Home</span>
                </a>
            </li>
            <li>
                <a href="https://wangjv0812.github.io/WangJV-Blog-Pages/posts/" title="Posts">
                    <span>Posts</span>
                </a>
            </li>
            <li>
                <a href="https://wangjv0812.github.io/WangJV-Blog-Pages/archives/" title="Archive">
                    <span>Archive</span>
                </a>
            </li>
            <li>
                <a href="https://wangjv0812.github.io/WangJV-Blog-Pages/tags/" title="Tags">
                    <span>Tags</span>
                </a>
            </li>
            <li>
                <a href="https://wangjv0812.github.io/WangJV-Blog-Pages/search/" title="🔍 Search (Alt &#43; /)" accesskey=/>
                    <span>🔍 Search</span>
                </a>
            </li>
        </ul>
    </nav>
</header>
<main class="main">

<article class="post-single">
  <header class="post-header">
    <div class="breadcrumbs"><a href="https://wangjv0812.github.io/WangJV-Blog-Pages/">Home</a>&nbsp;»&nbsp;<a href="https://wangjv0812.github.io/WangJV-Blog-Pages/posts/">Posts</a></div>
    <h1 class="post-title entry-hint-parent">
      3D Kinematics and Dynamics
    </h1>
    <div class="post-description">
      深入探讨三维空间中的运动学和动力学基础，包括旋转矩阵、四元数和李群理论
    </div>
    <div class="post-meta"><span title='2025-06-20 17:13:56 +0800 CST'>June 20, 2025</span>&nbsp;·&nbsp;5 min&nbsp;·&nbsp;898 words&nbsp;·&nbsp;WangJV&nbsp;|&nbsp;<a href="https://github.com/WangJV0812/WangJV-Blog-Source/tree/master/content/posts/3D%20Kinematics%20and%20Dynamics/index.md" rel="noopener noreferrer edit" target="_blank">Suggest Changes</a>

</div>
  </header> <div class="toc">
    <details >
        <summary accesskey="c" title="(Alt + C)">
            <span class="details">Table of Contents</span>
        </summary>

        <div class="inner"><nav id="TableOfContents">
  <ul>
    <li><a href="#1-旋转矩阵">1. 旋转矩阵</a>
      <ul>
        <li><a href="#11-罗德里格斯公式和角轴">1.1. 罗德里格斯公式和角轴</a></li>
        <li><a href="#12-欧拉角">1.2. 欧拉角</a></li>
      </ul>
    </li>
    <li><a href="#2-旋转的运动学">2. 旋转的运动学</a>
      <ul>
        <li><a href="#21-角速度">2.1. 角速度</a></li>
        <li><a href="#22-加速度">2.2. 加速度</a></li>
        <li><a href="#23-旋转矩阵的导数">2.3. 旋转矩阵的导数</a></li>
      </ul>
    </li>
  </ul>
</nav>
        </div>
    </details>
</div>

  <div class="post-content"><h2 id="1-旋转矩阵">1. 旋转矩阵<a hidden class="anchor" aria-hidden="true" href="#1-旋转矩阵">#</a></h2>
<p>对于空间中的一个向量 $\boldsymbol{r}$，在坐标系 $\mathcal F_1, \mathcal F_2$ 下，用坐标描述有：</p>
$$
\boldsymbol{r} = \mathcal F_1^T \boldsymbol{r}_1 = \mathcal F_2^T \boldsymbol{r}_2
$$<p>应有：</p>
$$
\boldsymbol{r}_1 = \mathcal F_1 \mathcal F_2^T \boldsymbol{r}_2
$$<p>我们令：</p>
$$
\boldsymbol R_{12} = \mathcal F_1 \mathcal F_2^T
$$<p>各种文献中旋转矩阵的定义十分混乱，我们遵从这样一个定义：$\boldsymbol R_{12}$，即将同一个向量丛坐标系 $\mathcal F_2$ 变换到坐标系 $\mathcal F_1$ 下。坐标系变换有：</p>
$$
\boldsymbol R_{12} \mathcal F_2= \mathcal F_1 \mathcal F_2^T \mathcal F_2 = \mathcal F_1
$$<p>类似的，我们还可以用向量的坐标和基之间的关系来推导坐标变换：</p>
$$
\begin{aligned}
    \boldsymbol{r}_2 &= \boldsymbol{R}_{21} \boldsymbol{r}_1\\
    \mathcal F_1^T \boldsymbol{r}_1 &= \mathcal F_2^T \boldsymbol{R}_{21} \boldsymbol{r}_1\\
    \mathcal F_1^T \boldsymbol{r}_1 &= \left(\boldsymbol{R}_{12} \mathcal F_2\right)^T \boldsymbol{r}_2\\
\end{aligned}
$$<p>那么应该有：</p>
$$
\mathcal F_1 = \boldsymbol{R}_{12} \mathcal F_2
$$<h3 id="11-罗德里格斯公式和角轴">1.1. 罗德里格斯公式和角轴<a hidden class="anchor" aria-hidden="true" href="#11-罗德里格斯公式和角轴">#</a></h3>
<p>任意一个向量 $\boldsymbol{r}$ 三维旋转总能通过一个单位的旋转轴 $\boldsymbol{n}$ 和绕着该轴的旋转角度 $\theta$ 来描述。我们不妨将向量 $\boldsymbol{r}$ 分解为垂直旋转轴的部分和水平旋转轴的部分：</p>
$$
\boldsymbol{r} = \boldsymbol{r}_\parallel + \boldsymbol{r}_\perp
$$<p>根据点乘（投影）和叉乘（公共法线）的性质，不难写出：</p>
$$
\boldsymbol{r}_\parallel = \frac{\boldsymbol{r} \cdot \boldsymbol{n}}{\boldsymbol{n} \cdot \boldsymbol{n}} \boldsymbol{n} = (\boldsymbol{r} \cdot \boldsymbol{n}) \boldsymbol{n}
$$<p>此时 $\boldsymbol{r}_\parallel$ 与旋转轴平行，旋转本身不影响其大小。对于垂直的部分 $\boldsymbol{r}_\perp$，有：</p>
$$
\boldsymbol{r}_\perp = \boldsymbol{r} - \boldsymbol{r}_\parallel = \boldsymbol{r} - (\boldsymbol{r} \cdot \boldsymbol{n}) \boldsymbol{n}
$$<p>我们需要在旋转平面（与旋转轴垂直的平面）上找到一个与 $\boldsymbol{r}_\perp$ 垂直的向量。这样可以构建出一个平面上的正交基，这样就可以通过平面的旋转矩阵来实现 $\boldsymbol{r}_\perp$ 的旋转了。这个向量 $\boldsymbol{w}$ 可以通过叉乘得到：</p>
$$
\begin{aligned}
\boldsymbol{w} &= \boldsymbol{n} \times \boldsymbol{r}_\perp\\
&= \boldsymbol{n} \times \left(\boldsymbol{r} - (\boldsymbol{r} \cdot \boldsymbol{n}) \boldsymbol{n}\right)\\
&= \boldsymbol{n} \times \boldsymbol{r} - \boldsymbol{n} \times (\boldsymbol{r} \cdot \boldsymbol{n}) \boldsymbol{n}\\
&= \boldsymbol{n} \times \boldsymbol{r}
\end{aligned}
$$<p>那么旋转结果可以写出：</p>
$$
\begin{aligned}
\boldsymbol{r}_\perp' &= \cos \theta \boldsymbol{r}_\perp + \sin \theta \boldsymbol{w}\\
&= \cos \theta \left(\boldsymbol{r} - (\boldsymbol{r} \cdot \boldsymbol{n}) \boldsymbol{n}\right) + \sin \theta \boldsymbol{n} \times \boldsymbol{r}\\
&= \cos \theta \boldsymbol{r} - \cos \theta (\boldsymbol{r} \cdot \boldsymbol{n}) \boldsymbol{n} + \sin \theta \boldsymbol{n} \times \boldsymbol{r}\\
\end{aligned}
$$<p>垂直分量和平行分量结合，有：</p>
$$
\begin{aligned}
\boldsymbol{r}' &= \boldsymbol{r}_\perp' + \boldsymbol{r}_\parallel'\\
&= \cos \theta \boldsymbol{r} - \cos \theta (\boldsymbol{r} \cdot \boldsymbol{n}) \boldsymbol{n} + \sin \theta \boldsymbol{n} \times \boldsymbol{r} + (\boldsymbol{r} \cdot \boldsymbol{n}) \boldsymbol{n}\\
&= cos \theta \boldsymbol{r} + (1 - \cos \theta) (\boldsymbol{r} \cdot \boldsymbol{n}) \boldsymbol{n} + \sin \theta \boldsymbol{n} \times \boldsymbol{r}\\
&= \cos \theta \boldsymbol{r} + (1 - \cos \theta) \boldsymbol{n}\boldsymbol{n}^T \boldsymbol{r} + \sin \theta \boldsymbol{n} \times \boldsymbol{r}\\
\end{aligned}
$$<p>可以总结为：</p>
$$
\boldsymbol{r}' \boldsymbol{r}^{-1} = \boldsymbol{R}_{21} = \cos \theta + (1 - \cos \theta) \boldsymbol{n}\boldsymbol{n}^T + \sin \theta \boldsymbol{n}^\times
$$<h3 id="12-欧拉角">1.2. 欧拉角<a hidden class="anchor" aria-hidden="true" href="#12-欧拉角">#</a></h3>
<p>欧拉角将三维旋转分解为绕三个坐标轴的旋转，最终的旋转可以表达为三个绕坐标轴旋转的合成：</p>
<p><img alt="eular angle" loading="lazy" src="https://wangjv0812.github.io/WangJV-Blog-Pages/2025/06/3d-kinematics-and-dynamics/Images/eular%20angle.png"></p>
<p>我们可以写出绕着三个旋转轴的旋转矩阵为：</p>
$$
\begin{array}{c}
\boldsymbol{R}_1 = \begin{bmatrix}
  \cos \theta_1 & -\sin \theta_1 & 0\\
  \sin \theta_1 & \cos \theta_1 & 0\\
  0 & 0 & 1
\end{bmatrix}\\
\boldsymbol{R}_2 = \begin{bmatrix}
  \cos \theta_2 & 0 & -\sin \theta_2\\
  0 & 1 & 0\\
  \sin \theta_2 & 0 & \cos \theta_2\\
\end{bmatrix}\\
\boldsymbol{R}_3 = \begin{bmatrix}
  1 & 0 & 0\\
  0 & \cos \theta_3 & \sin \theta_3\\
  0 & -\sin \theta_3 & \cos \theta_3
\end{bmatrix}
\end{array}
$$<p>任意一个旋转矩阵总可以表达为上面三个旋转矩阵的合成。麻烦的点在于不同的合成顺序，最终的旋转矩阵并不相同。我们给出 $1-2-3$ 顺序下的欧拉角旋转矩阵：</p>
$$
\begin{align*}
\boldsymbol{R}_{21}(\theta_{3},\theta_{2},\theta_{1}) &= \boldsymbol{R}_{3}(\theta_{3})\boldsymbol{R}_{2}(\theta_{2})\boldsymbol{R}_{1}(\theta_{1})\\
&= \begin{bmatrix}
c_{2}c_{3} & c_{1}s_{3}+s_{1}s_{2}c_{3} & s_{1}s_{3}-c_{1}s_{2}c_{3}\\
-c_{2}s_{3} & c_{1}c_{3}-s_{1}s_{2}s_{3} & s_{1}c_{3}+c_{1}s_{2}s_{3}\\
s_{2} & -s_{1}c_{2} & c_{1}c_{2}
\end{bmatrix}
\end{align*}
$$<p>不难发现旋转矩阵的奇异点：</p>
$$
\boldsymbol{R}_{21}(\theta_3, \frac \pi 2, \theta_1) =
\begin{bmatrix}
0& s_(\theta_1 + \theta_3)& -c(\theta_1 + \theta_3)\\
0& c(\theta_1 + \theta_3)& s(\theta_1 + \theta_3)\\
1& 0& 0
\end{bmatrix}
$$<p>可以看到，此时 $\theta_1$ 和 $\theta_3$ 表达了同一旋转。</p>
<p>此外，当旋转非常小时，有 $c_\theta \sim 1, s_\theta \sim \theta$，有：</p>
$$
\boldsymbol{R}_{21} = \begin{bmatrix}
1 & \theta_3 & -\theta_2 \\
-\theta_3 & 1 & \theta_1 \\
\theta_2 & -\theta_1 & 1
\end{bmatrix}
= 1 - \boldsymbol{\theta}^\times
$$<h2 id="2-旋转的运动学">2. 旋转的运动学<a hidden class="anchor" aria-hidden="true" href="#2-旋转的运动学">#</a></h2>
<h3 id="21-角速度">2.1. 角速度<a hidden class="anchor" aria-hidden="true" href="#21-角速度">#</a></h3>
<p>假设参考系 $\mathcal{F}_1$ 与 $\mathcal F_2$ 之间存在着相对旋转。我们定义 $\mathcal F_1$ 相对于 $\mathcal F_2$ 的角速度为 $\omega_{12} = -\omega_{21}$。其方向为旋转的轴的方向，大小为旋转的标量速度。由于旋转速度的存在，$\mathcal F_1$ 与 $\mathcal F_2$ 之间观察到的运动是不同的，不妨定义在 $\mathcal F_1$ 下的向量的时间导数为 $(·)^\bullet$，$\mathcal F_2$ 下向量的时间导数定义为 $(\cdot)^\circ$。应有在各自坐标系下观察坐标系的基向量的导数为0:</p>
$$
\begin{array}{c}
\mathcal F_1^\bullet = 0& \mathcal F_2^\circ = 0
\end{array}
$$<p>且根据叉乘的几何性质，有在坐标系 $\mathcal F_1$ 观察下，$\mathcal F_2$ 的基向量的导数为：</p>
$$
\mathcal F_2^\bullet = \omega_{21} \times \mathcal F_2
$$<p>类似的，有：</p>
$$
\mathcal F_1^\circ = \omega_{12} \times \mathcal F_1
$$<p>对于空间中的一个向量 $\boldsymbol{r}$，通过坐标描述，有：</p>
$$
\boldsymbol{r} = \mathcal F_1^T \boldsymbol{r}_1 = \mathcal F_2^T \boldsymbol{r}_2
$$<p>那么 $\mathcal F_1$ 坐标下观察的 $\boldsymbol{r}$ 的时间导数为：</p>
$$
\begin{aligned}
\boldsymbol{r}^\bullet
&= \mathcal {F_1^{\bullet}}^T \boldsymbol{r}_1 + \mathcal F_1^T \boldsymbol{r}_1^\bullet\\
&= \mathcal F_1^T \boldsymbol{r}_1^\bullet
\end{aligned}
$$<p>类似的有：</p>
$$
\begin{aligned}
\boldsymbol{r}^\circ
&= \mathcal {F_2^{\circ}}^T \boldsymbol{r}_2 + \mathcal F_2^T \boldsymbol{r}_2^\circ\\
&= \mathcal F_2^T \boldsymbol{r}_2^\circ
\end{aligned}
$$<p>需要注意，对于非向量的量（如标量、坐标等），可以理解其时间导数不受基向量的影响，满足 $\boldsymbol{r}^\bullet = \boldsymbol{r}^\circ$。那么有：</p>
$$
\boldsymbol{r}^\circ = \mathcal F_2^T \boldsymbol{r}_2^\bullet
$$<p>如果我们观察到向量 $\boldsymbol{r}$ 在 $\mathcal F_2$ 下的速度 $\boldsymbol{r}^\circ$（事实上这是很常见的。我们在一个运动坐标系下观察了一个物体的运动，希望知道其相对于禁止的坐标系的运动），想知道在坐标系 $\mathcal F_1$ 下向量 $\boldsymbol{r}^\bullet$ 的速度，那么应有：</p>
$$
\begin{aligned}
\boldsymbol{r}^\bullet
&= \left(\mathcal F_2^T \boldsymbol{r}_2\right)^\bullet
= \mathcal {F_2^T}^\bullet \boldsymbol{r}_2 + \mathcal F_2^T \boldsymbol{r}_2^\bullet\\
&= \boldsymbol{r}^\circ + \omega_{21} \times \mathcal F_2^T \boldsymbol{r}_2\\
&= \boldsymbol{r}^\circ  + \omega_{21} \times \boldsymbol{r}
\end{aligned}
$$<p>我们可以标记 $\omega_{21} = \mathcal F_2^T \omega_{21}^2$，那么有：</p>
$$
\begin{array}{cccl}
&\mathcal F_1^T \boldsymbol{r_1}^\bullet
&=& \mathcal F_2^T \boldsymbol{r}_2^\circ + \mathcal F_2^T \omega_{21}^2 \times \boldsymbol{r}_2\\
&\boldsymbol{r}_1^\bullet &=& \boldsymbol{R}_{12} \left(\boldsymbol{r}_2^\circ + \omega_{21}^2 \times \boldsymbol{r}_2\right)
\end{array}
$$<p>可以总结出；</p>
$$
\boldsymbol{r}_1^\bullet = \boldsymbol{R}_{12} \left(\boldsymbol{r}_2^\circ + \omega_{21}^2 \times \boldsymbol{r}_2\right)
$$<p>有趣的是，我们并没有对向量 $\boldsymbol{r}$ 的性质有任何假设。希望这句话可以给读者留下来一点点印象，该性质在后面的推导中十分重要。</p>
<h3 id="22-加速度">2.2. 加速度<a hidden class="anchor" aria-hidden="true" href="#22-加速度">#</a></h3>
<p>令速度 $\boldsymbol{v} = \boldsymbol{r}^\circ  + \omega_{21} \times \boldsymbol{r}$，使用前面的性质，有：</p>
$$
\begin{aligned}
\boldsymbol{r}^{\bullet\bullet} = \boldsymbol{v}^\bullet
&= \boldsymbol{v}^\circ + \omega_{21} \times \boldsymbol{v}\\
&= \left(\boldsymbol{r}^\circ  + \omega_{21} \times \boldsymbol{r}\right) ^\circ + \omega_{21} \times \left(\boldsymbol{r}^\circ  + \omega_{21} \times \boldsymbol{r}\right)\\
&= \boldsymbol{r}^{\circ\circ} + \omega_{21}^\circ \times \boldsymbol{r} + \omega_{21} \times \boldsymbol{r}^\circ + \omega_{21} \times \boldsymbol{r}^\circ + \omega_{21} \times \left(\omega_{21} \times \boldsymbol{r}\right)\\
&= \boldsymbol{r}^{\circ\circ} + \omega_{21}^\circ \times \boldsymbol{r} + 2\omega_{21} \times \boldsymbol{r}^\circ + \omega_{21} \times \left(\omega_{21} \times \boldsymbol{r}\right)
\end{aligned}
$$<p>同样的，我们引入旋转矩阵，建立两个坐标系下的向量的导数之间的关系：</p>
$$
\begin{array}{cccc}
\boldsymbol{r}^{\bullet\bullet} = \mathcal F_1^T \boldsymbol{r}_1^{\bullet\bullet}
& \boldsymbol{r}^{\circ\circ} = \mathcal F_2^T \boldsymbol{r}_2^{\circ\circ}
& \omega_{21} = \mathcal F_2^T \omega_{21}^2
& \boldsymbol{r} = \mathcal F_2^T \boldsymbol{r}_2
\end{array}
$$<p>有：</p>
$$
\boldsymbol{r}_1^{\bullet\bullet}
= \boldsymbol{R}_{12}\left(
\boldsymbol{r}_2^{\circ\circ}+ \omega_{21}^2 \times \boldsymbol{r}_2+ 2\omega_{21} \times \boldsymbol{r}_2^\circ+ \omega_{21} \times \left(\omega_{21} \times \boldsymbol{r}_2\right)
\right)
$$<p>事实上上面的形式中的每一项都有名字：</p>
$$
\begin{array}{rl}
\boldsymbol{r}_2^{\circ\circ}
    & \text{在} \mathcal F_2 \text{下的加速度}\\
2\omega_{21} \times \boldsymbol{r}_2^\circ
    & \text{科里奥利加速度}\\
\omega_{21}^2 \times \boldsymbol{r}_2
    & \text{角加速度}\\
\omega_{21} \times \left(\omega_{21} \times \boldsymbol{r}_2\right)
    & \text{向心加速度}\\
\end{array}
$$<h3 id="23-旋转矩阵的导数">2.3. 旋转矩阵的导数<a hidden class="anchor" aria-hidden="true" href="#23-旋转矩阵的导数">#</a></h3>
<p>对于坐标系 $\mathcal F_1$ 与 $\mathcal F_2$ 之间，有：</p>
$$
\mathcal F_1^T = \mathcal F_2^T \boldsymbol{R}_{21}
$$<p>两边在 $\mathcal F_1$ 下求时间导数：</p>
$$
\begin{array}{c}
0 = {\mathcal F_2^T}^\bullet \boldsymbol{R}_{21} + \mathcal F_2^T \boldsymbol{R}_{21}^\bullet\\
0 = \mathcal F_2^T {\omega_{21}^2}^\times \boldsymbol{R}_{21} + \mathcal F_2^T \boldsymbol{R}_{21}^\bullet\\
0 = \mathcal F_2^T \left({\omega_{21}^2}^\times \boldsymbol{R}_{21} + \boldsymbol{R}_{21}^\bullet \right)
\end{array}
$$<p>那么有：</p>
$$
\boldsymbol{R}_{21}^\bullet = -{\omega_{21}^2}^\times \boldsymbol{R}_{21}
$$<p>这就是著名的柏松公式。柏松公式还有下面一个有用的变形：</p>
$$
{\omega_{21}^2}^\times = -\boldsymbol{R}_{21}^\bullet \boldsymbol{R}_{21}^T
$$<p>通过这个形式我们可以通过计算旋转矩阵的数值微分来计算角速度。</p>


  </div>

  <footer class="post-footer">
    <ul class="post-tags">
      <li><a href="https://wangjv0812.github.io/WangJV-Blog-Pages/tags/%E6%95%B0%E5%AD%A6/">数学</a></li>
      <li><a href="https://wangjv0812.github.io/WangJV-Blog-Pages/tags/%E8%BF%90%E5%8A%A8%E5%AD%A6/">运动学</a></li>
      <li><a href="https://wangjv0812.github.io/WangJV-Blog-Pages/tags/%E5%8A%A8%E5%8A%9B%E5%AD%A6/">动力学</a></li>
      <li><a href="https://wangjv0812.github.io/WangJV-Blog-Pages/tags/%E6%97%8B%E8%BD%AC%E7%9F%A9%E9%98%B5/">旋转矩阵</a></li>
    </ul>
<nav class="paginav">
  <a class="prev" href="https://wangjv0812.github.io/WangJV-Blog-Pages/2025/06/naive-group-theory/">
    <span class="title">« Prev</span>
    <br>
    <span>Naive Group Theory</span>
  </a>
  <a class="next" href="https://wangjv0812.github.io/WangJV-Blog-Pages/2025/04/from-transformer-to-vggt/">
    <span class="title">Next »</span>
    <br>
    <span>From Transformer to VGGT</span>
  </a>
</nav>

  </footer>
</article>
    </main>
    
<footer class="footer">
        <span>&copy; 2025 <a href="https://wangjv0812.github.io/WangJV-Blog-Pages/">WangJV Blog</a></span> · 

    <span>
        Powered by
        <a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
        <a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
    </span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
        <path d="M12 6H0l6-6z" />
    </svg>
</a>

<script>
    let menu = document.getElementById('menu')
    if (menu) {
        menu.scrollLeft = localStorage.getItem("menu-scroll-position");
        menu.onscroll = function () {
            localStorage.setItem("menu-scroll-position", menu.scrollLeft);
        }
    }

    document.querySelectorAll('a[href^="#"]').forEach(anchor => {
        anchor.addEventListener("click", function (e) {
            e.preventDefault();
            var id = this.getAttribute("href").substr(1);
            if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
                document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
                    behavior: "smooth"
                });
            } else {
                document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
            }
            if (id === "top") {
                history.replaceState(null, null, " ");
            } else {
                history.pushState(null, null, `#${id}`);
            }
        });
    });

</script>
<script>
    var mybutton = document.getElementById("top-link");
    window.onscroll = function () {
        if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
            mybutton.style.visibility = "visible";
            mybutton.style.opacity = "1";
        } else {
            mybutton.style.visibility = "hidden";
            mybutton.style.opacity = "0";
        }
    };

</script>
<script>
    document.getElementById("theme-toggle").addEventListener("click", () => {
        if (document.body.className.includes("dark")) {
            document.body.classList.remove('dark');
            localStorage.setItem("pref-theme", 'light');
        } else {
            document.body.classList.add('dark');
            localStorage.setItem("pref-theme", 'dark');
        }
    })

</script>
<script>
    document.querySelectorAll('pre > code').forEach((codeblock) => {
        const container = codeblock.parentNode.parentNode;

        const copybutton = document.createElement('button');
        copybutton.classList.add('copy-code');
        copybutton.innerHTML = 'copy';

        function copyingDone() {
            copybutton.innerHTML = 'copied!';
            setTimeout(() => {
                copybutton.innerHTML = 'copy';
            }, 2000);
        }

        copybutton.addEventListener('click', (cb) => {
            if ('clipboard' in navigator) {
                navigator.clipboard.writeText(codeblock.textContent);
                copyingDone();
                return;
            }

            const range = document.createRange();
            range.selectNodeContents(codeblock);
            const selection = window.getSelection();
            selection.removeAllRanges();
            selection.addRange(range);
            try {
                document.execCommand('copy');
                copyingDone();
            } catch (e) { };
            selection.removeRange(range);
        });

        if (container.classList.contains("highlight")) {
            container.appendChild(copybutton);
        } else if (container.parentNode.firstChild == container) {
            
        } else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
            
            codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
        } else {
            
            codeblock.parentNode.appendChild(copybutton);
        }
    });
</script>
</body>

</html>
